#ifndef _MONDE_H_
#define _MONDE_H_

#include <vector>
#include <iostream>
#include <fstream>
#include <string>
#include <typeinfo>
#include "Batiment.h"
#include "Entite.h"
#include "Joueur.h"
#include "Carte.h"

struct initPartie{
	int nbJoueurs;
	Ressource *ressources;
	int type_config;
};
class Monde{

	public :
		Monde( Taille t);
		int ajouterBatiment(Batiment* b);
		int ajouterEntite(Entite* e);
		int executerUnTour();	// retourne un code - 0 en cours - 1 fini - 2  bug - 3 pas commencé...
		std::string getInfosJeu();
		void initialiser( initPartie init);
		std::vector<Entite*> getEntites();
		std::vector<Batiment*> getBatiments();
		Joueur getJoueur( int i);
		Carte getCarte();
		
		/// Cree une occupation selon les parametres passés
		void creerOccupation( Entite *e1, Element *e2);
		void creerOccupation( Entite *e1, Position p2);

		/**
		 * @brief Permet de savoir si le monde est toujours en cours, si le jeu toujours en cours d'execution
		 * 
		 * @return Le jeu est encore en cours ou termine
		 * @todo Completer la fonction en prenant regarde si les joueurs sobnt encore en vie
		*/
		bool enCours();


	private :
		// entites du jeu
		std::vector<Joueur> joueurs;
		std::vector<Entite*> entites;
		std::vector<Batiment*> batiments;
		Carte carte;  ///!!!!! L' * est temporaire, pas de pointeur plus tard

		// base de connaissance de départ
		std::vector<CarracteristiquesElement> batiments_config;
		std::vector<CarracteristiquesEntite> entites_config;
		

};

#endif
